package pe.com.pgn.consolidadorventas.servidorcentral.dbo.factory;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;

import org.apache.log4j.Logger;

import pe.com.pgn.consolidadorventas.servidorcentral.dbo.GnvVentaDetallada;
import pe.com.pgn.consolidadorventas.servidorcentral.dbo.GnvVentaDetalladaId;
import pe.com.pgn.consolidadorventas.servidorcentral.util.FechasUtil;
import pe.com.pgn.consolidadorventas.servidorcentral.util.LoggerUtil;
import pe.com.pgn.consolidadorventas.servidorcentral.ws.domain.gnv.GnvRegistroVenta;

public class GnvDboFactory {

	static Logger logger = Logger.getLogger(GnvDboFactory.class);
	static final String fechaMesDiaAnio = "MM/dd/yyyy";
	static final String numeroNulo = "0.0";
	
	public static GnvVentaDetallada generarDboVentaDetallada(GnvRegistroVenta g,String codEstacion) throws Exception{
		SimpleDateFormat formato = new SimpleDateFormat(fechaMesDiaAnio);
		GnvVentaDetallada d = new GnvVentaDetallada();
		GnvVentaDetalladaId id = new GnvVentaDetalladaId();
		
		try{
			id.setCodEstacion(codEstacion);
			id.setRecibo(new BigDecimal(g.getRecibo().trim()));
		}catch(Exception e){
			LoggerUtil.error(logger,"No se puede generar el registro para guardar para el registro : COD_ESTACION ="+codEstacion+" , SERIE ="+g.getSerie()+" , NUMERO ="+g.getNumero());
			id = null;
		}
		
		if(id!=null){
			d.setIdVentaDetallada(id);
			d.setSerie(g.getSerie());
			d.setNumero(g.getNumero());
			d.setSerieMaq(g.getSerieMaq());
			
			try{
				String fecVenta = FechasUtil.repararAMPMString(g.getFechaVenta().trim());
				d.setFechaVenta(FechasUtil.formatearStringToDateTimeAMPM(fecVenta));
			}catch(Exception e){
				d.setFechaVenta(null);
				LoggerUtil.error(logger,"No se pudo formatear la fecha de venta para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				d.setFechaProceso(formato.parse(g.getFechaProceso().trim()));
			}catch(Exception e){
				d.setFechaProceso(null);
				LoggerUtil.error(logger,"No se pudo formatear la fecha de proceso para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				String fecTurnoApertura = FechasUtil.repararAMPMString(g.getFecTurnoApertura().trim());
				d.setFecTurnoApertura(FechasUtil.formatearStringToDateTimeAMPM(fecTurnoApertura));
			}catch(Exception e){
				d.setFecTurnoApertura(null);
				LoggerUtil.error(logger,"No se pudo formatear la fecha de apertura para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				String fecTurnoCierre = FechasUtil.repararAMPMString(g.getFecTurnoCierre().trim());
				d.setFecTurnoCierre(FechasUtil.formatearStringToDateTimeAMPM(fecTurnoCierre));
			}catch(Exception e){
				d.setFecTurnoCierre(null);
				LoggerUtil.error(logger,"No se pudo formatear la fecha de turno de cierre para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				String fecInicioLectura = FechasUtil.repararAMPMString(g.getFecInicioLectura().trim());
				d.setFecInicioLectura(FechasUtil.formatearStringToDateTimeAMPM(fecInicioLectura));
			}catch(Exception e){
				d.setFecInicioLectura(null);
				LoggerUtil.error(logger,"No se pudo formatear la fecha de inicio de lectura para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				String fecFinLectura = FechasUtil.repararAMPMString(g.getFecFinLectura().trim());
				d.setFecFinLectura(FechasUtil.formatearStringToDateTimeAMPM(fecFinLectura));
			}catch(Exception e){
				d.setFecFinLectura(null);
				LoggerUtil.error(logger,"No se pudo formatear la fecha de fin de lectura para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			
			try{
				d.setLecturaInicial(new BigDecimal(g.getLecturaInicial().trim()));
			}catch(Exception e){
				d.setLecturaInicial(new BigDecimal(numeroNulo));
				LoggerUtil.error(logger,"No se pudo registrar lectura inicial para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				d.setLecturaFinal(new BigDecimal(g.getLecturaFinal().trim()));
			}catch(Exception e){
				d.setLecturaFinal(new BigDecimal(numeroNulo));
				LoggerUtil.error(logger,"No se pudo registrar lectura final para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			d.setRuc(g.getRuc());
			
			try{
				d.setCantidad(new BigDecimal(g.getCantidad().trim()));
			}catch(Exception e){
				d.setCantidad(new BigDecimal(numeroNulo));
				LoggerUtil.error(logger,"No se pudo registrar cantidad para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				d.setPrecioUnitario(new BigDecimal(g.getPrecioUnitario().trim()));
			}catch(Exception e){
				d.setPrecioUnitario(new BigDecimal(numeroNulo));
				LoggerUtil.error(logger,"No se pudo registrar precio unitario para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				d.setRecaudo(new BigDecimal(g.getRecaudo().trim()));
			}catch(Exception e){
				d.setRecaudo(new BigDecimal(numeroNulo));
				LoggerUtil.error(logger,"No se pudo registrar recaudo para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				d.setValorVenta(new BigDecimal(g.getValorVenta().trim()));
			}catch(Exception e){
				d.setValorVenta(new BigDecimal(numeroNulo));
				LoggerUtil.error(logger,"No se pudo registrar valor venta para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				d.setIgv(new BigDecimal(g.getIgv().trim()));
			}catch(Exception e){
				d.setIgv(new BigDecimal(numeroNulo));
				LoggerUtil.error(logger,"No se pudo registrar igv para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				d.setPrecioVenta(new BigDecimal(g.getPrecioVenta().trim()));
			}catch(Exception e){
				d.setPrecioVenta(new BigDecimal(numeroNulo));
				LoggerUtil.error(logger,"No se pudo registrar precio venta para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			try{
				d.setManguera(new BigDecimal(g.getManguera().trim()));
			}catch(Exception e){
				d.setManguera(new BigDecimal(numeroNulo));
				LoggerUtil.error(logger,"No se pudo registrar manguera venta para la serie :"+g.getSerie());
				throw new Exception(e.getLocalizedMessage());
			}
			
			d.setPlaca(g.getPlaca());
			d.setCara(g.getCara());
			d.setCodIsla(g.getCodIsla());
			d.setCodTurno(g.getCodTurno());
			d.setEstado(g.getEstado());
			d.setFlagSap(0);
			
		}else{
			d = null;
		}
		
		return d;
	}

}
